package com.itheima.reggie.service.impl;

import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.reggie.common.ResultInfo;
import com.itheima.reggie.domain.Category;
import com.itheima.reggie.mapper.CategoryMapper;
import com.itheima.reggie.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
@Service // web层
@Transactional  //开启事务
public class CategoryServiceImpl implements CategoryService {

    @Autowired // 注入
    private CategoryMapper categoryMapper;
    // 分类列表 查询所有
    @Override
    public List<Category> findAll() {
        return categoryMapper.findAll();
    }
    // 新增
    @Override
    public void save(Category category) {
        // 补全信息需要
        long l = IdUtil.getSnowflake(1, 1).nextId();
        // 设置id
        category.setId(l);
        // 创建人 修改人
      // category.setCreateUser(1L);//todo 暂时写死
      // category.setUpdateUser(1L);
      // // 创建时间 修改时间
      // category.setCreateTime(new Date()); // todo 暂时写死
      // category.setUpdateTime(new Date());

        // 调用新增的方法
        categoryMapper.save(category);
    }
    // 修改
    @Override
    public void updateById(Category category) {
        // 补全信息 因为要知道这是谁修改的
      //  category.setUpdateTime(new Date());
//
      //  category.setUpdateUser(1L); //todo 后期完善


        // 调用mapper的修改方法
       categoryMapper.updateById(category);
    }
    // 删除
    @Override
    public ResultInfo delete(Long id) {
        // 删除之前需要判断 如果菜系里面有菜品是不能删除
        Long countdish=categoryMapper.deleteBydish(id);
        if (countdish>0){
            ResultInfo.error("该分类下还有菜品不允许删除");
        }
        // 如果套餐里面有东西也不能删
       Long Setmeal =categoryMapper.deleteBySetmeal(id);
        if (Setmeal>0){
            ResultInfo.error("该分类下还有套餐不允许删除");
        }
        // 要删除的没有菜品没有套餐 就可以删除
        categoryMapper.delete(id);
        return ResultInfo.success();
    }

    // 菜品回显类型
    @Override
    public List<Category> findByType(Integer type) {
       //构建条件
        LambdaQueryWrapper<Category> wrapper = new LambdaQueryWrapper<>();
        // 动态sql 菜系分1 2 去对边回显的 type值
        wrapper.eq(Category::getType,type);
        // 排序
        wrapper.orderByAsc(Category::getSort);
        // mapper查询 返回应该是一个list集合 菜系1里面有很多
      return categoryMapper.selectList(wrapper);
    }
}
